package cn.autumnorange.app.common.provider.cacheannotation;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/** 标记缓存名,供插入缓存-数据库时加写锁,查询缓存-数据库时加读锁,自旋可以理解意思为循环期间内执行获取锁的代码为自旋 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Inherited
@Documented
public @interface RedisCacheTarget {
  static final String STRINGCACHE="java.lang.String";
  static final String MAPCACHE="map";
  static final String SETCACHE="set";

  /**
   * 字段类型和字段名 数据key#分隔 string#testKey 此方式如果入参对象有多层字段对象会有多个相同key name的情况发生
   * 比如Order A B - Order A C A B 此时取B下的属性字段会有俩个情况A下的B 和C下的A的B
   * @return 调整为 id#id#id 涉及集合选取id的用[x]来指定找有序集合中第几个元素
   */
  String fieldKeys() default "";
  /*
   *缓存类型
   */
  String cacheType() default "";
  long cacheTime() default 0L;
  int timeUnit() default 0;
}
